AWS Lambda
https://gyazo.com/dc1f5059cfd2c433637290d7a8ee562e
概要
/tmpには書き込みができる
実行パス(/usr/local/bin:/usr/bin/:/bin:/opt/bin)
RDSへアクセス→データベースプロキシ
AWS EFSをローカルにマウントすることでlambdaが共有リソースにアクセスできる構成 後続のイベントの処理時間を短縮するには、初期化中にAWS SDKクライアントなどの再利用可能なリソースを作成する
ラムダサービスのVPC内で展開されていて直接アクセスすることはできない。lambda api経由でのアクセス
lambdaはデフォルトだとawsのvpc上に展開されてパブリックエンドポイント(lambda api)経由でlambdaを呼び出すことになる
lambdaをvpc内に置くメリットは基本的にない
lambdaをvpc内に置く(eniを置く)メリットはないが、EC2や RDSなどのプライベートなVPC内のリソースにアクセスする際にはそうせざるをえない→データベースプロキシで解決できるならそうする
コンテナサポート
AWSが提供するベースイメージはLambdaのサービス基盤にあらかじめキャッシュされている(FROM public.ecr.aws/lambda/python:3.8みたいな)
ZIPパッケージは解凍後に250Mが上限
コンテナイメージの場合は最大10GBまでデプロイ可能
lambdaで大容量ファイルを扱う
S3から/tmpにファイルをDLする
コンテナイメージに含めておく
概念
Function
Trigger
lambda関数を呼び出すリソース
イベントソースマッピング
ストリーム/キューから項目をバッチで読み取り、関数を起動できる
関数の入力は複数になる
DynamoDB,Kinesis,SQS,Kafka
Event
lambda関数に渡されるJSON形式のドキュメント
デプロイパッケージ
zip
コンテナ
Layer
Lambda関数が使用するライブラリを共通化できる。ビジネスロジックの共通かなど
/optに展開される
最大5つまでのLayer
ユースケース
イベント駆動
ファイル処理
通知処理
ストリーム処理
フォームハンドラー
デプロイ方法
マネコンからソースコード編集
zipファイルをアップロード
S3に配置したzipをデプロイ
ECRからデプロイ
Layer
/opt以下に展開されるのでpythonライブラリをレイヤーにする場合は/opt/pythonに配置されるようにすればおk
Layerを作成してみるサンプル
VPC Lambda
lambdaをVPC内に配置するとlambdaに対してENIが付与される
lambda自体がENIを作成、削除できるようにlambdaに対して権限設定する必要がある
AWSLambdaVPCAccessExecutionRole
VPCサブネットのIPを消費するのでlambda用のサブネットを作成するのがベスト
lambdaのeniにはパブリックIPが付与されないので外部ネットワークと通信するにはNATゲートウェイが必要 複数の Lambda 実行環境が Hyperplane ENI を共有して、 Hyperplane ENI から VPC 内の ENI に NAT 処理を行うことで VPC 内のリソースへアクセスすることが可能となります。
ただし、この場合は AWS 外のサービスなどに直接パブリックインターネット経由でアクセスすることはできません。
https://gyazo.com/c06101a2885e62aede6dddfb53afda05
https://youtu.be/neqNR7Ffq-s
参照